package com.nts.visionworks.core.taglibrary.enumerationtag;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;

/**
 * 열거형에 대한 어노테이션 정보를 나타내며, 열거형의 상수에 대한 속성 정보 또한 포함한다.
 * @author Devcken
 */
public class EnumerationTag implements Serializable
{
	private static final long serialVersionUID = 5520158782101125907L;

	/**
	 * 열거형 상수에 대한 속성 목록을 나타낸다.
	 */
	private HashMap<String, EnumerationTagAttribute> _attributes;
	
	public EnumerationTag()
	{
		this._attributes = new HashMap<String, EnumerationTagAttribute>();
	}
	
	/**
	 * 열거형 상수 속성을 추가한다.
	 * @param attribute 열거형에 대한 상수 속성을 설정한다.
	 */
	public void addAttribute(EnumerationTagAttribute attribute)
	{
		this._attributes.put(attribute.getValue(), attribute);
	}
	
	/**
	 * 열거형에 해당되는 모든 열거형 상수 속성을 가져온다.
	 * @return 모든 열거형 상수 속성을 반환한다.
	 */
	public Collection<EnumerationTagAttribute> getAttributes()
	{
		return this._attributes.values();
	}
	
	/**
	 * 열거형 상수 명칭에 해당하는 열거형 상수 속성을 가져온다.
	 * @param value 열거형 상수 명칭을 설정한다.
	 * @return 열거형 상수 명칭에 해당되는 열거형 상수 속성이 반환된다. 일치하는 상수 속성이 없을 경우, null 값이 반환된다.
	 */
	public EnumerationTagAttribute getAttribute(String value)
	{
		if (!this._attributes.containsKey(value))
		{
			return null;
		}
		
		return this._attributes.get(value);
	}

	/**
	 * 열거형에 대한 명칭을 나타낸다.
	 */
	private String name;

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}
}